PHP 8.3(2023 年发布)

1. 类型化类常量(Typed Class Constants)

特性:

示例:

// PHP < 8.3(未强制类型)
interface I {
    const PHP = 'PHP 8.2'; // 默认类型为 string
}
class Foo implements I {
    const PHP = []; // 允许定义为数组
}

// PHP 8.3(强制类型)
interface I {
    const string PHP = 'PHP 8.3'; // 显式声明为字符串类型
}
class Foo implements I {
    const string PHP = []; // 报错:无法用数组作为字符串类型的值
}

2. 新增 json_validate() 函数

特性:

示例:

$json = '{ "example": "title" }';
if (json_validate($json)) {
    echo "Valid JSON"; // 输出: Valid JSON
} else {
    echo "Invalid JSON";
}

3. Randomizer 类扩展

特性:

示例:

use Random\Randomizer;
$randomizer = new Randomizer();
$float = $randomizer->getFloat(0.0, 100.0); // 生成 0.0 到 100.0 之间的浮点数
$bytes = $randomizer->getBytesFromString("seed"); // 从种子生成随机字节

4. 新增 str_increment()str_decrement() 函数

特性:

示例:

$str = "1";
$str = str_increment($str); // 输出: "2"
$str = str_decrement($str); // 输出: "0"

// 报错示例
$str = "A";
$str = str_decrement($str); // 抛出 ValueError: "A" 无法减

5. #[\Override] 属性

特性:

示例:

use PHPUnit\Framework\TestCase;

final class MyTest extends TestCase {
    protected $logFile;

    protected function setUp(): void {
        $this->logFile = fopen('/tmp/logfile', 'w');
    }

    #[\Override]
    protected function taerDown(): void { // 拼写错误(正确应为 tearDown)
        fclose($this->logFile);
        unlink('/tmp/logfile');
    }
}
// 报错:MyTest::taerDown() 有 #[\Override],但父类中无此方法

6. 动态获取类常量

特性:

示例:

class Foo {
    const PHP = 'PHP 8.3';
}
$searchableConstant = 'PHP';
echo Foo::{$searchableConstant}; // 输出: PHP 8.3

7. 只读属性的深拷贝支持

特性:

示例:

readonly class Foo {
    public function __construct(
        public PHP $php
    ) {}
}

$original = new Foo(new PHP('8.3'));
$cloned = clone $original;
$cloned->php->version = '8.4'; // 允许在 __clone 中修改 readonly 属性

8. 其他改进

(1) 改进 unserialize() 错误处理

(2) 负数索引支持

(3) 匿名只读类